<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
    function toLarge(str){
      const arr = str.split('')
      const newArr = []
      for(let i=0; i< arr.length; i++) {
        if(!isNaN(arr[i])){
          // 数字
          if(arr[i+1] && !isNaN(arr[i+1])){
            newArr.push(Number(arr[i]+arr[i+1])+1)
            i++
          }else{
            newArr.push(Number(arr[i])+1)
          }
        }else{
          newArr.push(arr[i])
        }
      }
      return newArr.join('')
    }
    /**
     * @params str 源字符
     * @params head : 今天
     * @params right : 明天
     * */ 
    function getOneDay(str, head, right ) {
      const middle = '到'+right
      let res = ''
      const arr = str.split(middle)
      if(arr.length>1) {
          const main = arr[0]
          let preFix = arr[1]
          let endIndex = preFix.indexOf(right)
          endIndex = endIndex === -1 ? preFix.length :  endIndex
          res = main + preFix.slice(0, endIndex)
      }else{
          res = str.slice(0, str.indexOf(right))
      }
      res = addHead(res, head)
      return res
    }

    //先删除不相干的语句
    /**
     * @desc 删除带某些关键字  前或后的句子
     * @params index 取关键字前面 还是 后面
    */
    function delFix(text, keywords, index, needHead) {
      if(!text.match(keywords)) return text
      const arr = text.split(/[，|。]/)
      const todel = arr.find(t=> {
        if(t.match('到' + keywords)) return false
        return t.match(keywords)
      })
      if(todel) {
        let res = text.split(todel)[index]
        if(res.charAt(0) === '，' || res.charAt(0) === '。')  res = res.slice(1)
        if(needHead) res = todel+'。' + res
        return res
      }else{
        return text
      }
    }
    /**
     * @desc 如果解析后天的天气，直接将第一个“后天”字眼以前的内容全部删除，然后将其他多余的“后天”字眼删除即可
     * */ 
    function addHead(str, head) {
      const arr = str.split(head)
      return arr.reduce((text, cur)=> text+cur, head)
    }
  const map = {
    '今天、明天、后天': 3,
    '今天、明天': 2,
    '明天、后天': 2      
  }
  function mergeHead(text) {
    let temp = text
    const list = Object.entries(map)
    
    for(let i=0; i< list.length; i++){
      const key = list[i][0]
      const pre = key.split('、')
      if(text.includes(key)){
        const length = list[i][1]
        const arr = text.split(/[，|。]/)
        const str = arr[0]
        const main = str.slice(key.length)+'。'
        temp = arr.slice(1).join('，')
        for(let j=length-1; j>=0; j--) {
          temp = pre[j] + main + temp
        }
        break
      }
    }
    return temp
  }
    function parseWind(text) {
      // 判断是否连续出现 今天明天后天
      // 如果出现了，就拆开 依次添加进text
      text = mergeHead(text)

      let arr = new Array(4).fill('')
      // 去掉后天
      text = delFix(text, '后天', 0)      
      
      console.log(text)
      // 今天白天
      const day11 = getOneDay(text.slice(0, text.indexOf('明天')), '今天', '夜')
      // 今天夜里
      const day12 = getOneDay(text, '今天', '明天')
      // 明天白天
      const text_ming = delFix(text.slice(text.indexOf('明天')), '夜', 0)
      const day21 = getOneDay(text_ming, '明天', '夜')
      // 明天夜里
      const sp = text.match('到明天')? '到明天': '明天'
      const isNeedHead = text.match('到明天')? false : true
      const text_ming2 = delFix(text, sp, 1, isNeedHead)
      const day22 = getOneDay(text_ming2, '明天', '后天')

      arr = [day11, day12, day21, day22]
      const largeArr = arr.map(v=> toLarge(v))
      return {arr, largeArr}
    }

    function parseWind2(text) {
      let arr = new Array(4).fill('')
      text = mergeHead(text)
      const index1 = text.indexOf('今天')
      const index2 = text.indexOf('明天')
      if(text.slice(index1, index2).match('夜')){
        text = delFix(text, '今天', 1)
      }
      
      console.log(text)
      const day11 = getOneDay(text, '今天', '明天')
      
      const text_ming = delFix(text.slice(text.indexOf('明天')), '夜', 0)
    let k = '夜'
    if(text_ming.indexOf('夜') == -1 || text_ming.indexOf('夜') > text_ming.indexOf('后')){
      k = '后'
    }
    const day12 = getOneDay(text_ming, '明天', k)
      
      const sp = text.match('到明天')? '到明天': '明天'
      const isNeedHead = text.match('到明天')? false : true
      const text_ming2 = delFix(text, sp, 1, isNeedHead)
      const day21 = getOneDay(text_ming2, '明天', '后天')
      
      const day22 = addHead(text.slice(text.indexOf('后天')), '后天')
      
      arr = [day11, day12, day21, day22]
      const largeArr = arr.map(v=> toLarge(v))
      return {arr, largeArr}
    }
    

    // console.log(parseWind2('如今天西北风7-8级阵风9级，夜里到明天西北风8级阵风9-10级，明天上午减弱到7-8级阵风9级，明天下半夜到后天偏北风8级阵风9-10级，后天夜里起7-8级阵风9级。'))
    console.log(parseWind2('今天西北风7-8级阵风9级，夜里到明天西北风8级阵风9-10级，明天上午减弱到7-8级阵风9级，明天下半夜到后天偏北风8级阵风9-10级'))
  </script>
</body>
</html>